//	--------------------------------------------------------------------
//	Copyright(C) 2006,2007 Zhao Yukun. All rights reserved.
//	This file is a part of the Xeres system.
//	Xeres 2007
//	Contact : xeres.engine@gmail.com
//	$(reservedInfo)
//	$(reservedDeclaration)
//	--------------------------------------------------------------------
///	@file	<updater.cpp>
///	@path	~/src/gui/
///	@date	2008/06/07
///	@desc	.

#define _FULLAPI
#include "config/config.h"

#include "gui/updater.h"

namespace xeres {

	// UpdateGuard
	UpdateGuard::UpdateGuard( RefWeak<IGuiForm> form , Updater& updater , const Pair<int>& base )
		: m_form( form )
		, m_updater( updater )
		, m_base( base )
		, m_lastGuard( updater.m_guard )
	{
		updater.m_guard = this;
		m_updater.m_localPt -= m_base;
	}
	// ~UpdateGuard
	UpdateGuard::~UpdateGuard( void )
	{
		// restore base
		m_updater.m_localPt += m_base;
		// restore guard
		m_updater.m_guard = m_lastGuard;
	}

	// PolluteRegion
// 	void Updater::PolluteRegion( RefWeak<IGuiForm> parent , const Rect<int>& region )
// 	{
// 		Rect<int> rect( region );
// 		
// 		// find base of parent
// 		if( m_guard )
// 		{
// 			Pair<int> base(0,0);
// 			UpdateGuard * guard = m_guard;
// 			while( guard )
// 			{
// 				if( guard->m_form == parent )
// 					break;
// 				guard = guard->m_lastGuard;
// 			}
// 			XS_ASSERT( guard );
// 
// 			while( guard )
// 			{
// 				base += guard->m_base;
// 				guard = guard->m_lastGuard;
// 			}
// 			rect.offset( base );
// 		}
// 
// 		if( m_dirtRect.is_empty() )
// 		{
// 			m_dirtRect = rect;
// 		}
// 		else
// 		{
// 			m_dirtRect = m_dirtRect | rect;
// 		}
// 	}

} // namespace xeres
